package Proxy_Test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

class myhandle implements InvocationHandler
{
	Object us1;
	myhandle(Object us1)
	{
		this.us1 = us1;
	}

		@Override
		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
		{
			long begin = System.currentTimeMillis();
			//执行方法
			//若传proxy,则会造成死循环
			Object ret = method.invoke(us1);
			long end = System.currentTimeMillis();
			System.out.println(method + "执行时间:" + (end - begin) + "ms");
			return ret;
		}


//jdk动态生成的代理类继承了接口,内部重写了接口的方法
//	public final void vipPlay() throws  {
//		try {
//			super.h.invoke(this, m3, (Object[])null);
//		} catch (RuntimeException | Error var2) {
//			throw var2;
//		} catch (Throwable var3) {
//			throw new UndeclaredThrowableException(var3);
//		}
//	}

}


public class Test
{
	public static void main(String[] args) throws InterruptedException
	{
		user u = new user();
		//使用代理对象计算类中每个成员方法的调用时间
		//代理对象 = Proxy.newProxyInstance(类加载器 , 父接口 , 处理器)
		//类似linux中的线程执行任务 void* 函数(void*)
		usermethod u1 = (usermethod)Proxy.newProxyInstance(u.getClass().getClassLoader(),
				u.getClass().getInterfaces(),
				new myhandle(u)
				);
		u1.query();
	}

}
